package br.com.leopard.erp.gym.negocio.empresa;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Named;

import br.com.leopard.erp.gym.dao.empresa.EmpresaPerfilDAO;
import br.com.leopard.erp.gym.exception.NenhumResultadoEncontradoException;
import br.com.leopard.erp.gym.mapeamento.base_sistema.Perfil;
import br.com.leopard.erp.gym.mapeamento.empresa.Empresa;
import br.com.leopard.erp.gym.mapeamento.empresa.EmpresaPerfil;
import br.com.leopard.erp.gym.negocio.AbstractNegocio;
import br.com.leopard.erp.gym.negocio.excessoes.SaveException;

@Named
@ConversationScoped
public class EmpresaPerfilNegocio extends AbstractNegocio<EmpresaPerfil, Long> implements Serializable {

	private static final long serialVersionUID = 1L;

	@EJB
	private EmpresaPerfilDAO empresaPerfilDAO;

	@PostConstruct
	private void init() {
		super.setDao(empresaPerfilDAO);
	}

	public void inativarTodosPerfils(Empresa empresa) {
		empresaPerfilDAO.inativarPerfilDeEmpresa(empresa);
	}

	public EmpresaPerfil getByEmpresaEPerfil(Empresa empresa, Perfil perfil) throws NenhumResultadoEncontradoException {
		return empresaPerfilDAO.getByEmpresaEPerfil(empresa, perfil);
	}

	public void salvarPerfilsParaEmpresa(Empresa empresaSelecionada, List<Perfil> perfilsSelecionadosList) throws SaveException {
		this.inativarTodosPerfils(empresaSelecionada);

		for (int i = 0; i < perfilsSelecionadosList.size(); i++) {
			Perfil perfil = perfilsSelecionadosList.get(i);

			salvarEmpresaPerfil(empresaSelecionada, perfil);
		}
	}

	private void salvarEmpresaPerfil(Empresa empresaSelecionada, Perfil perfil) throws SaveException {
		try {
			EmpresaPerfil empresaPerfil = this.getByEmpresaEPerfil(empresaSelecionada, perfil);

			this.ativar(empresaPerfil);
		} catch (NenhumResultadoEncontradoException e) {
			EmpresaPerfil empresaPerfil = new EmpresaPerfil();
			empresaPerfil.setEmpresa(empresaSelecionada);
			empresaPerfil.setPerfil(perfil);

			this.save(empresaPerfil);
			this.ativar(empresaPerfil);
		}
	}
}
